
/*
* Отдельная запись, соответствующая строке
*   из m.*.csv.
* Все значимые поля публичны для снижения
*   числа сеттеров и геттеров.
* Реализован конструктор по конкретному
*   шаблону Tuple
*/
public class AccountingRecord {
    public String recordName;
    public boolean isExpense;
    public int quantity;
    public int price;
    private final String[] requirements =
            new String[]{"String","Boolean","Integer","Integer"};

    AccountingRecord(final Tuple tuple) {
        Object[] unpack;
        try{
            unpack = tuple.unpack(requirements);
        } catch (Exception exception) {
            System.err.println(exception.getMessage());
            throw (new RuntimeException());
        }
        recordName = (String) unpack[0];
        isExpense = ((Boolean) unpack[1]).booleanValue();
        quantity = ((Integer) unpack[2]).intValue();
        price = ((Integer) unpack[3]).intValue();
    }

    public int countSum(){
        return quantity * price;
    }
    public boolean isLessThan(AccountingRecord that) {
        return this.countSum() < that.countSum();
    }

    @Override
    public String toString() {
        return String.format("%s: \"%s\" на сумму %9d у.е", isExpense?"Трата":"Доход",
                recordName, countSum());
    }
}
